package br.com.conciliador.download.vo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Formula;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

import br.com.conciliador.download.vo.filtro.FiltroDownloadVo;
import br.com.conciliador.seguranca.vo.UsuarioVo;
import br.com.r2.util.tipodado.Data;
import br.com.r2.util.tipodado.DataHora;
import br.com.r2.util.tipodado.Inteiro;
import br.com.r2.util.tipodado.InteiroLongo;
import br.com.r2.util.tipodado.Texto;

@Entity
@Table(name = "TBDWN")
@Proxy(lazy = true)
public class DownloadVo implements Serializable
{

   /**
    * 
    */
   private static final long serialVersionUID = -6337662436999325603L;

   @Id
   @Column(name = "DWNCD")
   @GeneratedValue(generator = "InteiroSequenceGenerator")
   @GenericGenerator(name = "InteiroSequenceGenerator", strategy = "br.com.r2.util.tipodado.hibernate.generator.InteiroSequenceGenerator", parameters = { @Parameter(name = "sequence", value = "SQDWN") })
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroLongoUT")
   private InteiroLongo codigo;

   @Column(name = "DWNQT")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroUT")
   private Inteiro quantidadeRegistros;

   @Column(name = "DWNDTARQ")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataUT")
   private Data dataArquivo;

   @Column(name = "DWNDTGRC")
   @Type(type = "br.com.r2.util.tipodado.hibernate.DataHoraUT")
   private DataHora dataGeracao;

   @Column(name = "DWNNMARQ")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto nomeArquivo;

   @Column(name = "DWNST")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroUT")
   private Inteiro situacao;

   @Formula("(SELECT DN.DMNNMVLR FROM TBDMN DN WHERE DN.DMNNMCMP = 'DWNST' AND DN.DMNFGATV = 'S' AND DN.DMNVLCMP = DWNST)")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto descricaoSituacao;

   @Column(name = "DWNTPARQ")
   @Type(type = "br.com.r2.util.tipodado.hibernate.InteiroUT")
   private Inteiro tipoArquivo;

   @Formula("(SELECT DN.DMNNMVLR FROM TBDMN DN WHERE DN.DMNNMCMP = 'DWNTPARQ' AND DN.DMNFGATV = 'S' AND DN.DMNVLCMP = DWNTPARQ)")
   @Type(type = "br.com.r2.util.tipodado.hibernate.TextoUT")
   private Texto descricaoTipoArquivo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "PRMCD")
   private ParametroVo parametroVo;

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "USRCDINC")
   private UsuarioVo usuarioVo;

   @Transient
   private FiltroDownloadVo filtro;

   public InteiroLongo getCodigo()
   {
      return codigo;
   }

   public void setCodigo(InteiroLongo codigo)
   {
      this.codigo = codigo;
   }

   public Inteiro getQuantidadeRegistros()
   {
      return quantidadeRegistros;
   }

   public void setQuantidadeRegistros(Inteiro quantidadeRegistros)
   {
      this.quantidadeRegistros = quantidadeRegistros;
   }

   public Data getDataArquivo()
   {
      return dataArquivo;
   }

   public void setDataArquivo(Data dataArquivo)
   {
      this.dataArquivo = dataArquivo;
   }

   public DataHora getDataGeracao()
   {
      return dataGeracao;
   }

   public void setDataGeracao(DataHora dataGeracao)
   {
      this.dataGeracao = dataGeracao;
   }

   public Texto getNomeArquivo()
   {
      return nomeArquivo;
   }

   public void setNomeArquivo(Texto nomeArquivo)
   {
      this.nomeArquivo = nomeArquivo;
   }

   public Inteiro getSituacao()
   {
      return situacao;
   }

   public void setSituacao(Inteiro situacao)
   {
      this.situacao = situacao;
   }

   public Inteiro getTipoArquivo()
   {
      return tipoArquivo;
   }

   public void setTipoArquivo(Inteiro tipoArquivo)
   {
      this.tipoArquivo = tipoArquivo;
   }

   public ParametroVo getParametroVo()
   {
      return parametroVo;
   }

   public void setParametroVo(ParametroVo parametroVo)
   {
      this.parametroVo = parametroVo;
   }

   public UsuarioVo getUsuarioVo()
   {
      return usuarioVo;
   }

   public void setUsuarioVo(UsuarioVo usuarioVo)
   {
      this.usuarioVo = usuarioVo;
   }

   public FiltroDownloadVo getFiltro()
   {
      return filtro;
   }

   public void setFiltro(FiltroDownloadVo filtro)
   {
      this.filtro = filtro;
   }

   public Texto getDescricaoSituacao()
   {
      return descricaoSituacao;
   }

   public void setDescricaoSituacao(Texto descricaoSituacao)
   {
      this.descricaoSituacao = descricaoSituacao;
   }

   public Texto getDescricaoTipoArquivo()
   {
      return descricaoTipoArquivo;
   }

   public void setDescricaoTipoArquivo(Texto descricaoTipoArquivo)
   {
      this.descricaoTipoArquivo = descricaoTipoArquivo;
   }

}
